/*------------------------------------------------------
                hou_elearningGEN beta v1.0
Author: xtrung.net@gmail.com
Write On: 04/27/2008
Create On:4/13/2012 11:22:27 AM
------------------------------------------------------*/
using hou_elearning.Entity;
using hou_elearning.DataAccess;
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text;
namespace hou_elearning.Business
{
    public class BaihocBRL
    {
        #region Init
        private static string EX_NOT_EXIST="Không Tồn Tại Baihoc Này";
		private static string EX_STENBAIHOC_EMPTY="sTenbaihoc không được để trống";
		private static string EX_ITRANGTHAI_INVALID="iTrangthai không hợp lệ";
		private static string EX_DNGAYTAO_INVALID="dNgaytao không hợp lệ";
		private static string EX_DNGAYCAPNHAT_INVALID="dNgaycapnhat không hợp lệ";
		private static string EX_ISOTHUTU_INVALID="iSothutu không hợp lệ";
		private static string EX_FK_ITAINGUYENID_INVALID="FK_iTainguyenID không hợp lệ";
		private static string EX_FK_INGUOITAOID_INVALID="FK_iNguoitaoID không hợp lệ";
		private static string EX_FK_INGUOICAPNHAT_INVALID="FK_iNguoicapnhat không hợp lệ";
		private static string EX_ID_INVALID="PK_iBaihocID không hợp lệ";
        private static string EX_STENSLIDE_EXISTED = "Tên bài học hiện tại đã tồn tại!";
        #endregion
        #region Public Methods
        /// <summary>
        /// Get Baihoc Theo ID
        /// </summary>
        /// <param name="PK_iBaihocID">Int64:Baihoc ID</param>
        /// <returns>BaihocEntity</returns>        
        public static BaihocEntity GetOne(Int64 PK_iBaihocID)
        {
            
			if(PK_iBaihocID<=0)
				throw new Exception(EX_ID_INVALID);
            return BaihocDAL.GetOne(PK_iBaihocID);
        }
        /// <summary>
        /// Lấy về List các Baihoc
        /// </summary>
        /// <returns>List BaihocEntity:List Baihoc Cần lấy</returns>
        public static List<BaihocEntity> GetAll()
        {
            return BaihocDAL.GetAll();
        }
        public static List<BaihocEntity> GetTop()
        {
            return BaihocDAL.GetTop();
        }
        public static List<BaihocEntity> GetTopByTime()
        {
            return BaihocDAL.GetTopByTime();
        }
        public static List<BaihocEntity> GetByFK_iNguoitaoID(Int64 FK_iNguoitaoID)
		{
			if(FK_iNguoitaoID<=0)
				throw new Exception(EX_FK_INGUOITAOID_INVALID);
			return BaihocDAL.GetByFK_iNguoitaoID(FK_iNguoitaoID);
		}public static List<BaihocEntity> GetByFK_iNguoicapnhat(Int64 FK_iNguoicapnhat)
		{
			if(FK_iNguoicapnhat<=0)
				throw new Exception(EX_FK_INGUOICAPNHAT_INVALID);
			return BaihocDAL.GetByFK_iNguoicapnhat(FK_iNguoicapnhat);
		}
        /// <summary>
        /// Kiểm tra và thêm mới Baihoc
        /// </summary>
        /// <param name="entity">Entity</param>
        /// <returns>Int32: ID của Baihoc Mới Thêm Vào</returns>
        public static Int32 Add(BaihocEntity entity)
        {
            checkLogic(entity);
            checkDuplicate(entity, false);
            checkFK(entity);
            return BaihocDAL.Add(entity);
        }
        /// <summary>
        /// Kiểm tra và chỉnh sửa Baihoc
        /// </summary>
        /// <param name="entity">BaihocEntity</param>
        /// <returns>bool:kết quả thực hiện</returns>
        public static bool Edit(BaihocEntity entity)
        {
            checkExist(entity.PK_iBaihocID);
            checkLogic(entity);
            checkDuplicate(entity, true);
            checkFK(entity);
            return BaihocDAL.Edit(entity);
        }
        /// <summary>
        /// Kiểm tra và xoá Baihoc
        /// </summary>
        /// <param name="PK_iBaihocID">Int64 : PK_iBaihocID</param>
        /// <returns>bool:kết quả thực hiện</returns>
        public static bool Remove(Int64 PK_iBaihocID)
        {
            checkExist(PK_iBaihocID);
            return BaihocDAL.Remove(PK_iBaihocID);
        }
        #endregion
        #region Private Methods
        private static void checkExist(Int64 PK_iBaihocID)
        {
            BaihocEntity oBaihoc=BaihocDAL.GetOne(PK_iBaihocID);
            if(oBaihoc==null)
                throw new Exception(EX_NOT_EXIST);
        }
        /// <summary>
        /// Kiểm tra logic Entity
        /// </summary>
        /// <param name="entity">BaihocEntity: entity</param>
        private static void checkLogic(BaihocEntity entity)
        {   
			if (String.IsNullOrEmpty(entity.sTenbaihoc))
				throw new Exception(EX_STENBAIHOC_EMPTY);
			if (entity.iTrangthai < 0)
				throw new Exception(EX_ITRANGTHAI_INVALID);
			if (DateTime.Parse("1753-01-01")>entity.dNgaytao)
				throw new Exception(EX_DNGAYTAO_INVALID);
			if (DateTime.Parse("1753-01-01")>entity.dNgaycapnhat)
				throw new Exception(EX_DNGAYCAPNHAT_INVALID);
			if (entity.FK_iNguoitaoID < 0)
				throw new Exception(EX_FK_INGUOITAOID_INVALID);
			if (entity.FK_iNguoicapnhat < 0)
				throw new Exception(EX_FK_INGUOICAPNHAT_INVALID);
        }
        /// <summary>
        /// Kiểm tra trùng lặp bản ghi
        /// </summary>
        /// <param name="entity">BaihocEntity: BaihocEntity</param>
        private static void checkDuplicate(BaihocEntity entity,bool checkPK = false)
        {
            
            //Example
            List<BaihocEntity> list = BaihocDAL.GetAll();
            if (list.Exists(
                delegate(BaihocEntity oldEntity)
                {
                    bool result = oldEntity.sTenbaihoc.Equals(entity.sTenbaihoc, StringComparison.OrdinalIgnoreCase);
                    if(checkPK)
                        result=result && oldEntity.PK_iBaihocID != entity.PK_iBaihocID;
                    return result;
                }
            ))
            {
                list.Clear();
                throw new Exception(EX_STENSLIDE_EXISTED);
            }
            
        }
        /// <summary>
        /// Kiểm tra tồn tại khóa ngoại
        /// </summary>
        /// <param name="entity">BaihocEntity:entity</param>
        private static void checkFK(BaihocEntity entity)
        {            
			NguoidungEntity oNguoidung = NguoidungDAL.GetOne(entity.FK_iNguoitaoID);
			if (oNguoidung==null)
			{
				throw new Exception("Không tìm thấy :FK_iNguoitaoID");
			}
			oNguoidung = NguoidungDAL.GetOne(entity.FK_iNguoicapnhat);
			if (oNguoidung==null)
			{
				throw new Exception("Không tìm thấy :FK_iNguoicapnhat");
			}
        }
        #endregion
    }
}
